import { forEachValue } from "./utils";
import Module from "./module";

export default class ModuleCollection {
  constructor(rootModule) {
    this.register(rootModule, []);
  }

  register(rawModule, path, parentModule) {
    let newModule;
    if (path.length === 0) {
      newModule = new Module(rawModule, path);
      this.root = newModule;
    } else {
      newModule = new Module(rawModule, path, parentModule);
      parentModule.addChild(path[path.length - 1], newModule);
    }
    if (rawModule.modules) {
      forEachValue(rawModule.modules, (rawChildModule, key) => {
        this.register(rawChildModule, path.concat([key]), newModule);
      });
    }
  }
}
